#pragma once
#include "common.h"
#include <list>
//
// 一个轨道区间
class Track {
public:
    Track(int id, fp_type length) : length(length), id(id) {};
    Track(int id, fp_type length, fp_type speedLimit)
        : id(id), length(length), speedLimit(speedLimit) {};
    ~Track() {};
    fp_type getLength() const { return length; }
    void addTrain(int id);
    void update();
    void removeFirstTrain(DIRECTION direction);
    inline std::size_t trainNum() { return trains.size(); };
    int getID() { return id; };
    fp_type getSpeedLimit() const { return speedLimit; }

private:
    fp_type length; // 轨道长度/米
    // SIGNAL head_signal;    // 上行方向信号机状态
    // SIGNAL tail_signal;    // 下行方向信号机状态
    fp_type speedLimit;    // 轨道限速 km/h
    std::list<int> trains; // 轨道上的列车列表（双向链表）
    int id;                // 轨道编号
};
